﻿using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Forms;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Drawing.Imaging;

using RAE.Logica.Controladores;
using RAE.Logica.Info;
using RAE.GUI.Inicio;
using System.Text.RegularExpressions;

namespace RAE.GUI.Info

{
    /// <summary>
    /// Interaction logic for Registro.xaml
    /// </summary>
    public partial class DialogoConsulta : Window
    {
        private byte[] fotografia;
        private Ajedrecista ajedrecista;
        private VentanaPrincipal vp;

        public DialogoConsulta(VentanaPrincipal vp, Ajedrecista a)
        {
            InitializeComponent();

            this.vp = vp;

            combo_pais.ItemsSource = Aplicacion.paises.Values;
            ajedrecista = a;

            cargarAjedrecista();
            entrarEnConsulta();
        }

        private void ImageButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            //dlg.FileName = "Document"; // Default file name
            //dlg.DefaultExt = ".jpg"; // Default file extension
            dlg.Filter = "Fotografía (.jpg)|*.jpg|Cualquier archivo|*.*"; // Filter files by extension
            dlg.CheckFileExists = true;
            dlg.DereferenceLinks = true;

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string selectedFileName = dlg.FileName;
                fotografia = File.ReadAllBytes(selectedFileName);
                BitmapImage bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.UriSource = new Uri(selectedFileName);
                bitmap.EndInit();
                image_foto.Source = bitmap;
            }
        }

        private void RegistrarClick(object sender, RoutedEventArgs e)
        {
            Ajedrecista a = new Ajedrecista();
            a.id = ajedrecista.id;
            a.cedula = text_cedula.Text;
            a.nombre= text_nombre.Text;
            a.apellidos = text_apellidos.Text;
            a.puntaje_elo = int.Parse(text_elo.Text);
            a.fechaNacimiento = date_fecha_nacimiento.SelectedDate;
            a.nacionalidad = (Pais) combo_pais.SelectedValue;
            a.esResidente = check_residente.IsChecked ?? false;
            a.tel_residencia = text_residencia.Text;
            a.tel_celular = text_celular.Text;
            a.email = text_email.Text;
            a.comentario = text_comentario.Text;
            a.fotografia = this.fotografia;

            Aplicacion.actualizarAjedrecista(a);
            vp.setGrid();
            entrarEnConsulta();
        }

        private void CerrarClick(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void EditarClick(object sender, RoutedEventArgs e)
        {
            entrarEnEdicion();
        }

        private void RevertirClick(object sender, RoutedEventArgs e)
        {
            cargarAjedrecista();
            entrarEnConsulta();
        }

        private void QuitarFoto(object sender, RoutedEventArgs e)
        {
            image_foto.Source = null;
            fotografia = null;
        }

        private void cargarAjedrecista()
        {
            text_apellidos.Text = ajedrecista.apellidos;
            text_cedula.Text = ajedrecista.cedula;
            text_celular.Text = ajedrecista.tel_celular;
            text_comentario.Text = ajedrecista.comentario;
            text_elo.Text = ajedrecista.puntaje_elo.ToString();
            text_email.Text = ajedrecista.email;
            text_nombre.Text = ajedrecista.nombre;
            text_residencia.Text = ajedrecista.tel_residencia;

            date_fecha_nacimiento.SelectedDate = ajedrecista.fechaNacimiento;
            combo_pais.SelectedItem = ajedrecista.nacionalidad;

            fotografia = ajedrecista.fotografia;
            image_foto.Source = LoadImage(fotografia);

            check_residente.IsChecked = ajedrecista.esResidente;
            
            label_the_registro.Content = ajedrecista.id + "  " + ajedrecista.fechaRegistro;
        }

        private static BitmapImage LoadImage(byte[] imageData)
        {
            if (imageData == null || imageData.Length == 0) return null;
            var image = new BitmapImage();
            using (var mem = new MemoryStream(imageData))
            {
                mem.Position = 0;
                image.BeginInit();
                image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.UriSource = null;
                image.StreamSource = mem;
                image.EndInit();
            }
            image.Freeze();
            return image;
        }

        private void entrarEnConsulta()
        {
            button_cerrar.Visibility = Visibility.Visible;
            button_editar.Visibility = Visibility.Visible;

            button_foto.Visibility = Visibility.Hidden;
            button_quitar_foto.Visibility = Visibility.Hidden;
            button_registrar.Visibility = Visibility.Hidden;
            button_revertir.Visibility = Visibility.Hidden;

            text_apellidos.IsEnabled = false;
            text_cedula.IsEnabled = false;
            text_celular.IsEnabled = false;
            text_comentario.IsEnabled = false;
            text_elo.IsEnabled = false;
            text_email.IsEnabled = false;
            text_nombre.IsEnabled = false;
            text_residencia.IsEnabled = false;

            date_fecha_nacimiento.IsEnabled = false;
            date_fecha_deceso.IsEnabled = false;
            combo_pais.IsEnabled = false;
            check_residente.IsEnabled = false;
        }

        private void entrarEnEdicion()
        {
            button_cerrar.Visibility = Visibility.Hidden;
            button_editar.Visibility = Visibility.Hidden;

            button_foto.Visibility = Visibility.Visible;
            button_quitar_foto.Visibility = Visibility.Visible;
            button_registrar.Visibility = Visibility.Visible;
            button_revertir.Visibility = Visibility.Visible;

            text_apellidos.IsEnabled = true;
            text_cedula.IsEnabled = true;
            text_celular.IsEnabled = true;
            text_comentario.IsEnabled = true;
            text_elo.IsEnabled = true;
            text_email.IsEnabled = true;
            text_nombre.IsEnabled = true;
            text_residencia.IsEnabled = true;

            date_fecha_nacimiento.IsEnabled = true;
            date_fecha_deceso.IsEnabled = true;
            combo_pais.IsEnabled = true;
            check_residente.IsEnabled = true;
        }
        private void text_cedula_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            try
            {
                Regex regex = new Regex("^(-)?\\d+$|^-?$");
                e.Handled = !(regex.IsMatch(e.Text));
            }
            catch (Exception f)
            { }
        }

        private void text_nombre_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            try
            {
                Regex regex = new Regex("[a-zA-Z]+$");
                e.Handled = !(regex.IsMatch(e.Text));
            }
            catch (Exception f)
            { }
        }
    }
}
